import WxRequest from 'mina-request';
// 导入封装的本地存储操作模块
import { getStorageSync, clearStorage } from './storage';
// 导入封装的增强 API 
import { toast } from './extendApi';

// 对 WxRequest 进行实例化
const instance = new WxRequest({
  baseURL: 'http://localhost:9000', // 使用时请换成真实接口
  timeout: 10000, // 超时时长
  isLoading: false, // 是否使用默认的 loading 效果
  header: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
});

// 添加请求拦截器
instance.interceptors.request = (config) => {
  // 将 token 添加到请求头
  const token = getStorageSync('token');
  if (token) {
    config.header['token'] = token;
  }
  // // 设置 Content-Type 为 application/x-www-form-urlencoded
  // config.header['Content-Type'] = 'application/x-www-form-urlencoded';
  
  // // 将 data 对象转换为 x-www-form-urlencoded 格式
  // if (config.header['Content-Type'] === 'application/x-www-form-urlencoded') {
  //   config.data = Object.keys(config.data)
  //     .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(config.data[key])}`)
  //     .join('&');
  // }
  
  // 在发送请求前做点什么
  return config;
};

// 添加响应拦截器
instance.interceptors.response = (response) => {
  // response 是服务器响应的数据，只不过数据被 wx.request 进行了一层包装
  // console.log(response);
  // response.isSuccess = true，代码执行了 wx.request 的 success 回调函数
  // response.isSuccess = false，代码执行了 wx.request 的 fail 回调函数
  // response.statusCode // http 响应状态码
  // response.config // 网络请求请求参数
  // response.data 服务器响应的真正数据

  // 对响应数据做点什么
  // 失败
  if (!response.isSuccess) {
    toast({
      title: '网络异常请重试',
      icon: 'error'
    });
    return Promise.reject(response);
  }
  // 成功且状态码 === 200 
  return response.data;
};

// 导出实例
export default instance;
